# -*- coding: utf-8 -*-
# @Time : 2024/2/28 21:18
# @Author : Hami
import jsonpath
# 类（同类型）、方法

# 基于requests 进行二次封装，我们可以加一些特殊的提示、结合其它框架做一些调整
import allure
import requests
import json
import pymysql
from config import *


# 工具类、关键字驱动、基类
# 请求方法：
class ApiKey:
    @allure.step(">>>>>>发送get请求")
    def get(self, url, params=None, **kwargs):
        """
        发送get请求
        :param url:请求的URL
        :param params: 需要拼装在URL当中的参数
        :param kwargs: 其它参数，具体参考requests.post()
        :return: 响应数据
        """
        print("\n>>>发送GET请求")
        return requests.get(url=url, params=params, **kwargs)

    @allure.step(">>>>>>发送post请求")
    def post(self, url, data=None, json=None, **kwargs):
        """
        发送POST请求
        :param url: 请求的URL
        :param data: 请求的数据
        :param json: 请求数据如果是json可直接使用该参数
        :param kwargs: 其它参数，具体参考requests.post()
        :return: 响应数据
        """
        print("\n>>>发送POST请求")
        return requests.post(url=url, data=data, json=json, **kwargs)

    @allure.step(">>>>>>发送delete请求")
    def delete(self, url, **kwargs):
        """
        发送delete请求
        @param url:
        @param kwargs:
        @return:
        """
        print("\n>>>发送delete请求")
        return requests.delete(url=url, **kwargs)

    @allure.step(">>>>>>提取响应数据")
    def get_text(self, response, key, index=0):
        """
        基于jsonpath获取数据的关键字：用于提取所需要的内容
        :param response: 响应报文，默认为json格式
        :param key: jsonpath的表达式
        :param index: 获取的下标，默认0
        :return:
        """
        print("\n>>>提取响应数据")
        # 判断数据类型: 如果是字符串，就给他转字典
        if isinstance(response, str):
            response = json.loads(response)

        value_list = jsonpath.jsonpath(response, key)
        return value_list[index]

    @allure.step(">>>>>>提取数据库的数据")
    def get_sql_value(self, sql, index=0):
        """

        """
        # 1. 配置数据库连接信息并连接
        connection = pymysql.connect(
            host=DB_HOST,  # 数据库地址
            port=DB_PORT,
            user=DB_USER,  # 数据库用户名
            password=DB_PASSWORD,  # 数据库密码
            db=DB_DBNAME,  # 数据库名称
        )
        # 2. 创建游标对象，使用它进行操作 ---人
        cursor = connection.cursor()
        # 4. 使用游标对象去执行操作SQL
        cursor.execute(sql)
        # 5. 得到结果集的下一行
        result = cursor.fetchone()
        # 6. 关闭数据库连接
        cursor.close()
        return result[index]


# 调式完毕一定要注释
# sql = "SELECT id,username,nickname FROM sxo_user where username='hami'"
# print(ApiKey().get_sql_value(sql))
